//练习了对 map 的使用、基本操作及其常用函数。
//map 结构自建红黑树。具体应用场景通过习题来体会吧。

#include <map>
#include <iostream>
#include <algorithm>
#include <string>

using namespace std;


int test_insert(void)
{
    map<int, string> stu;

    //insert
    stu.insert(pair<int, string>(1, "jmx"));
    stu.insert(pair<int, string>(2, "wzc"));
    stu.insert(pair<int, string>(3, "lhb"));
    //array 数组的形式可以指定位置对内容进行修改
    stu[999] = "jjjjjjjj";

    //insert return an iter to
    // pair<map<int, string>::iterator, bool> Insert_Pair;
    // Insert_Pair = stu.insert(map<int, string>::value_type(11, "student_one"));
    // if (Insert_Pair.second == true)
    //     cout << "Insert true" << endl;
    // else
    //     cout << "Insert false" << endl;

    //output
    map<int, string>::iterator iter = stu.begin();
    for (iter; iter != stu.end(); ++iter)
        cout << iter->first << " " << iter->second << endl;
    // // reverse iterator
    // map<int, string>::reverse_iterator riter = stu.rbegin();
    // for (riter; riter != stu.rend(); ++riter)
    //     cout << riter->first << " " << riter->second << endl;
    // //array traverse
    // //适用于first 连续的
    // for (int nindex = 1; nindex <= stu.size(); nindex++)
    //     cout << stu[nindex] << endl;
    
    // //size
    // cout << stu.size() << endl;

    cout << "=================" << endl;

    return 0;
}

int test_find(void)
{
    map<int, string> stu;



    //insert
    stu.insert(pair<int, string>(1, "jmx"));
    stu.insert(pair<int, string>(2, "wzc"));
    stu.insert(pair<int, string>(3, "lhb"));
    //array 数组的形式可以指定位置对内容进行修改
    stu[999] = "jjjjjjjj";



    // // find 
    // map<int,string>::iterator ifind;
    // ifind = stu.find(1);
    // if(ifind != stu.end())  //注意该判断条件
    //     cout<<"Find the string is "<<ifind->second<<endl;
    // else
    //     cout<<" 404 not found"<<endl;
    
    //find -- Equanl_range()
    // pair<map<int, string>::iterator, map<int, string>::iterator> mappair;
    // mappair = stu.equal_range(12);
    // if(mappair.second != mappair.first)
    //     cout<<"Find "<<endl;
    // else
    //     cout<<" 404 not found"<<endl;

    //upper_bound()返回上界 带查找的下一个位置   lower_bound()即为查找的位置
    // map<int, string> :: iterator  i_bound;
    // i_bound = stu.upper_bound(2);
    // cout<<i_bound->second<<endl;


    int n = stu.count(1);
    cout<<n<<endl;

    return 0;
}

int main()
{
    test_insert();
    test_find();

    return 0;
}
